package com.cmc.cloud.cmclink.doc.api.document.req.so;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;

import java.util.Date;

/**
 * 特种货审批主信息 Base VO，提供给添加、修改、详细的子 VO 使用
 * 如果子 VO 存在差异的字段，请不要添加到这里，影响 Swagger 文档生成
 *
 * @author codegen
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SpecialCargoApplyBaseApiVO {

    @Schema(description = "申请主信息ID,更新需要传")
    private Long id;

    @Schema(description = "是否合作方")
    private Boolean partnerFlag;

    @Schema(description = "申请号", requiredMode = Schema.RequiredMode.REQUIRED)
    @Length(max = 20, message = "申请号支持最大长度{max}")
    private String applyNo;

    @Schema(description = "申请类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @Length(max = 20, message = "申请类型支持最大长度{max}")
    private String applyType;

    @Schema(description = "客户参考号")
    @Length(max = 50, message = "客户参考号支持最大长度{max}")
    private String referenceNo;

    @Schema(description = "订舱号", requiredMode = Schema.RequiredMode.REQUIRED)
    @Length(max = 50, message = "订舱号支持最大长度{max}")
    private String bookingNo;

    @Schema(description = "超级白名单号")
    @Length(max = 50, message = "超级白名单号支持最大长度{max}")
    private String praNo;

    @Schema(description = "接舱方", requiredMode = Schema.RequiredMode.REQUIRED)
    @Length(max = 50, message = "接舱方支持最大长度{max}")
    private String spaceOwner;

    @Schema(description = "接货地", requiredMode = Schema.RequiredMode.REQUIRED)
    @Length(max = 5, message = "接货地支持最大长度{max}")
    private String porCode;

    @Schema(description = "装货港", requiredMode = Schema.RequiredMode.REQUIRED)
    @Length(max = 5, message = "装货港支持最大长度{max}")
    private String polCode;

    @Schema(description = "卸货港", requiredMode = Schema.RequiredMode.REQUIRED)
    @Length(max = 5, message = "卸货港支持最大长度{max}")
    private String podCode;

    @Schema(description = "目的地", requiredMode = Schema.RequiredMode.REQUIRED)
    @Length(max = 5, message = "目的地支持最大长度{max}")
    private String delCode;

    @Schema(description = "是否内支线", requiredMode = Schema.RequiredMode.REQUIRED)
    private Boolean inlandCargo;

    @Schema(description = "是否过境CNSHA", requiredMode = Schema.RequiredMode.REQUIRED)
    private Boolean transitCnsha;

    @Schema(description = "申请备注", example = "你猜")
    @Length(max = 200, message = "申请备注支持最大长度{max}")
    private String applyRemark;

    @Schema(description = "申请状态", example = "1")
    @Length(max = 50, message = "申请状态支持最大长度{max}")
    private String applyStatus;

    @Schema(description = "申请时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date applyTime;

    @Schema(description = "申请人电话")
    @Length(max = 20, message = "申请人电话支持最大长度{max}")
    private String applyMobile;

    @Schema(description = "申请人邮箱", requiredMode = Schema.RequiredMode.REQUIRED)
    @Length(max = 500, message = "申请人邮箱支持最大长度{max}")
    private String applyEmail;

    @Schema(description = "申请人")
    @Length(max = 50, message = "申请人最大长度{max}")
    private String applyUser;

    @Schema(description = "当前港口")
    @Length(max = 5, message = "当前港口最大长度{max}")
    private String currentPort;

    @Schema(description = "危险品联系人")
    @Length(max = 50, message = "危险品联系人最大长度{max}")
    private String applyName;

    @Schema(description = "危险品联系人地址")
    @Length(max = 50, message = "危险品联系人地址最大长度{max}")
    private String applyAddress;

    @Schema(description = "危险品联系人传真")
    @Length(max = 50, message = "危险品联系人传真最大长度{max}")
    private String applyFax;

    @Schema(description = "航线审批总状态")
    @Length(max = 50, message = "航线审批总状态最大长度{max}")
    private String approveStatus;

    @Schema(description = "数据来源")
    private String dataSource;

    @Schema(description = "卸货港车船直取，默认false")
    private Boolean directTruckPod;

    @Schema(description = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    @Schema(description = "创建人")
    private String creator;

    @Schema(description = "操作时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    @Schema(description = "操作人")
    private String updater;

}
